package com.example.businessmanage.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.example.businessmanage.domain.dto.*;

/**
 * 代养业务接口（代养人操作：发送意向、确认代养、申请返回等）
 */
public interface FosterService {

    /**
     * 发送代养意向（加入待选择代养人/宠物集合）
     * @param fosterIntentDTO 代养意向参数（宠物ID）
     * @param fosterUserId 代养人用户ID（从UserContext获取）
     * @return 意向发送结果
     */
    Boolean sendFosterIntent(FosterIntentDTO fosterIntentDTO, Long fosterUserId);

    /**
     * 确认/拒绝代养（确认改3-运输中，拒绝改2-已申请外借）
     * @param fosterConfirmDTO 代养确认参数（宠物ID、处理结果、协议ID）
     * @param fosterUserId 代养人用户ID（权限校验）
     * @return 确认/拒绝结果
     */
    Boolean confirmFoster(FosterConfirmDTO fosterConfirmDTO, Long fosterUserId);

    /**
     * 确认接收宠物（外借情况从3改为4-在代养人手里）
     * @param petId 宠物ID
     * @param fosterUserId 代养人用户ID（权限校验）
     * @return 确认接收结果
     */
    Boolean confirmReceivePet(Long petId, Long fosterUserId);

    /**
     * 申请返回宠物（根据当前状态改6或7）
     * @param petId 宠物ID
     * @param fosterUserId 代养人用户ID（权限校验）
     * @return 申请返回结果
     */
    Boolean applyReturnPet(Long petId, Long fosterUserId);

    /**
     * 上传代养协议（存储OSS URL到数据库）
     * @param agreementUploadDTO 协议上传参数（宠物ID、OSS URL）
     * @param fosterUserId 代养人用户ID（权限校验）
     * @return 上传结果
     */
    Boolean uploadAgreement(AgreementUploadDTO agreementUploadDTO, Long fosterUserId);

    /**
     * 分页查询“我的代养”列表（外借情况>1且负责人是自己）
     * @param fosterUserId 代养人用户ID
     * @param pageNum 页码
     * @param pageSize 每页条数
     * @return 分页代养业务列表（含宠物、主人信息）
     */
    IPage<FosterBusinessRespDTO> getMyFoster(Long fosterUserId, Integer pageNum, Integer pageSize);

    /**
     * 分页查询“我的待选择代养宠物”列表
     * @param fosterUserId 代养人用户ID
     * @param pageNum 页码
     * @param pageSize 每页条数
     * @return 分页宠物简易信息列表
     */
    IPage<PetSimpleRespDTO> getToBeSelectedPet(Long fosterUserId, Integer pageNum, Integer pageSize);
}
